#include <types.h>
#include <kernel/system.h>
#include <kernel/initcall.h>
#include <drivers/irq.h>
#include <drivers/gpio.h>
#include <kernel/syslog.h>
#include <kernel/kobject.h>
#include <irqnum.h>
#include <drivers/uart.h>
#include <string.h>
#include <kernel/shell.h>


static void delay(int delay)
{
    for(volatile int i = 0; i<delay; i++)
        for(volatile int j=0;j<1000;j++);
}


void test_exit_handler(void *data)
{
    irq_clear_flag(9);
    gpio_toggle_value(IO_PA2);
}


int main(void)
{
    int ret = gpio_request(IO_PA2);
    if(ret) {
        return 0;
    }

    gpio_direction_output(IO_PA2, IO_LOW);
    gpio_set_value(IO_PA2, 1);

    gpio_request(IO_PB9);

    int irq = gpio_to_irq(IO_PB9, IRQF_FALLING);
    irq_request(irq, test_exit_handler, NULL);
    irq_enable(irq);

    while(1) {
        // gpio_set_value(IO_PA2, 0);
        // //GPIOA->ODR &=  ~(1 << 1);
        // delay(1000);
        // gpio_set_value(IO_PA2, 1);
        // //GPIOA->ODR |=  (1 << 1);
        // delay(1000);
        shell_loop();
    }
    
    return 0;
}
